switch (arg)
{
case 0:
- if (!_gtk_css_parser_try_int (parser, &data->n_steps))
+ if (!gtk_css_parser_consume_integer (parser, &data->n_steps))
{
- _gtk_css_parser_error (parser, "Expected number of steps");
return 0;
}
else if (data->n_steps < 1)
val = _gtk_css_number_value_new (1.0, GTK_CSS_NUMBER);
else if (gtk_css_parser_try_ident (parser, "off"))
val = _gtk_css_number_value_new (0.0, GTK_CSS_NUMBER);
- else if (_gtk_css_parser_try_int (parser, &num))
- val = _gtk_css_number_value_new ((double)num, GTK_CSS_NUMBER);
+ else if (gtk_css_parser_has_integer (parser))
+ {
+ if (gtk_css_parser_consume_integer (parser, &num))
+ {
+ val = _gtk_css_number_value_new ((double)num, GTK_CSS_NUMBER);
+ }
+ else
+ {
+ g_free (name);
+ _gtk_css_value_unref (result);
+ return NULL;
+ }
+ }
else
val = _gtk_css_number_value_new (1.0, GTK_CSS_NUMBER);
child = _gtk_css_image_new_parse (parser);
if (child == NULL)
- return FALSE;
+ return 0;
- if (!_gtk_css_parser_try_int (parser, &scale))
+ if (!gtk_css_parser_has_integer (parser))
scale = arg > 0 ? g_array_index (data->scales, int, arg - 1) + 1 : 1;
+ else if (!gtk_css_parser_consume_integer (parser, &scale))
+ return 0;
g_ptr_array_add (data->images, child);
g_array_append_val (data->scales, scale);
parser->data[len] != '(';
}
+gboolean
+gtk_css_parser_has_integer (GtkCssParser *parser)
+{
+ guint i;
+
+ i = 0;
+ if (parser->data[0] == '-')
+ i++;
+
+ if (parser->data[i] >= '0' && parser->data[i] <= '9')
+ return TRUE;
+
+ return FALSE;
+}
+
gboolean
gtk_css_parser_has_function (GtkCssParser *parser,
const char *name)
}
gboolean
-_gtk_css_parser_try_int (GtkCssParser *parser,
- int *value)
+gtk_css_parser_consume_integer (GtkCssParser *parser,
+ int *value)
{
gint64 result;
char *end;
/* strtoll parses a plus, but we are not allowed to */
if (*parser->data == '+')
- return FALSE;
+ goto fail;
errno = 0;
result = g_ascii_strtoll (parser->data, &end, 10);
if (errno)
- return FALSE;
+ goto fail;
if (result > G_MAXINT || result < G_MININT)
- return FALSE;
+ goto fail;
if (parser->data == end)
- return FALSE;
+ goto fail;
parser->data = end;
*value = result;
_gtk_css_parser_skip_whitespace (parser);
return TRUE;
+
+fail:
+ _gtk_css_parser_error (parser, "Expected an integer");
+ return FALSE;
}
gboolean
GtkCssTokenType token_type);
gboolean gtk_css_parser_has_ident (GtkCssParser *parser,
const char *name);
+gboolean gtk_css_parser_has_integer (GtkCssParser *parser);
gboolean gtk_css_parser_has_function (GtkCssParser *parser,
const char *name);
gboolean skip_whitespace);
char * _gtk_css_parser_try_name (GtkCssParser *parser,
gboolean skip_whitespace);
-gboolean _gtk_css_parser_try_int (GtkCssParser *parser,
- int *value);
gboolean _gtk_css_parser_try_hash_color (GtkCssParser *parser,
GdkRGBA *rgba);
char * gtk_css_parser_consume_string (GtkCssParser *self);
gboolean gtk_css_parser_consume_number (GtkCssParser *self,
double *number);
+gboolean gtk_css_parser_consume_integer (GtkCssParser *parser,
+ int *value);
gboolean gtk_css_parser_consume_function (GtkCssParser *self,
guint min_args,
guint max_args,
else
multiplier = 1;
- if (_gtk_css_parser_try_int (parser, &a))
+ if (gtk_css_parser_has_integer (parser))
{
+ if (!gtk_css_parser_consume_integer (parser, &a))
+ {
+ if (selector)
+ _gtk_css_selector_free (selector);
+ return NULL;
+ }
if (a < 0)
{
_gtk_css_parser_error (parser, "Expected an integer");
else
multiplier = 1;
- if (_gtk_css_parser_try_int (parser, &b))
+ if (gtk_css_parser_has_integer (parser))
{
+ if (!gtk_css_parser_consume_integer (parser, &b))
+ {
+ if (selector)
+ _gtk_css_selector_free (selector);
+ return NULL;
+ }
if (b < 0)
{
_gtk_css_parser_error (parser, "Expected an integer");